The present disclosure relates generally to analysis of program efficiency, and more specifically, to an identification of performance bottlenecks.
A bottleneck is a region of a program (e.g., program code) where significant execution time is spent. Typically, software developers use a profiling tool to collect program execution profiles such as the timing information for each method, routine, process, etc. With the help of such a profiling tool, the developer can sort, e.g., methods by the time spent on them. The methods that consume an amount of time greater than a threshold defined by, e.g., the developer may be treated as bottlenecks. However, the effectiveness of this approach depends on the program's runtime characteristics. Many programs, such as large enterprise commercial applications, do not have obvious bottlenecks. Therefore, their profiles contain a large amount of routines, processes, or methods where the execution time is spent relatively evenly (e.g., within a threshold). This type of profile is often referred to as a “flat profile” because no method dominates the execution time.
Prior technologies fail to totally solve the problem of identifying bottlenecks in flat profiles. For example, prior technologies are unable to detect potential bottlenecks in the form of a sub-graph, i.e., multiple sequential paths breaching from a single entry node. Prior technologies take a long time to complete mining when processing large profile data.